/**
* 使用knn进行计算
* @staticObjects 标准对象集合		（输入1）
* @newObject 新对象				（输入2）
* @propertyNames 比对属性名集合	（输入3）
* @k 比较邻近的k个样例	（输入4）
* return 最临近的标准对象的标签   （输出）
*/
function knnCalc(staticObjects,newObject,propertyNames,k) {
	//求值
	// var minStaticObject = null;
	// var minTotal = 0;
	var orderObjects = [];
	for (var i = 0; i < staticObjects.length; i++) {
		var staticObject = staticObjects[i];
		var total = 0;
		var compareObj = {};
		for (var j = 0; j < propertyNames.length; j++) {
			var pName = propertyNames[j];
			var knnPval = Math.abs(staticObject[pName] - newObject[pName]);
			compareObj[pName] = knnPval;
			total += knnPval;
		}
		staticObject.compareVal = total;
		// if(minStaticObject === null || total < minTotal){
		// 	minStaticObject = staticObject;
		// 	minTotal = total;
		// }
		showCalcVal(compareObj,staticObject,newObject,total);//显示行计算结果
		//按结果从近到远排序
		if(orderObjects.length === 0){
			orderObjects.push(staticObject);
		}else{
			var f = false; //未插入标志
			for (var j = 0; j < orderObjects.length; j++) {
				if(staticObject.compareVal <= orderObjects[j].compareVal){
					orderObjects.splice(j, 0, staticObject);
					f = true;
					break;
				}
			}
			if(!f){
				orderObjects.push(staticObject);
			}
		}
	}
	resetTable(orderObjects, k);//重新排序表格

	//对比，找最匹配值（最小值）
	// if(minStaticObject != null){
	// 	return minStaticObject;
	// }else{
	// 	alert("未找到匹配项,请检查数据合理性");
	// }

	var result = new Map();
	var maxLabel =''
	var maxLabelSize = 0;
	for (var i = 0; i < k  && i < orderObjects.length; i++) {
		if(result.has(orderObjects[i].type)){
			var m = result.get(orderObjects[i].type) + 1;
			result.set(orderObjects[i].type, m);
			if(maxLabelSize < m){
				maxLabel = orderObjects[i].type;
				maxLabelSize = m;
			}
		}else{
			result.set(orderObjects[i].type, 1);
		}
	}
	return maxLabel;
}
